#!/bin/bash

# 节点的总数，根据你的 hosts.json 文件来设置
N=4

# 主程序的可执行文件名
APP_NAME="./adkr_node"

# 日志文件存放的目录
LOG_DIR="logs"

# 启动函数
start() {
    # 检查主程序是否存在
    if [ ! -f "$APP_NAME" ]; then
        echo "错误: 可执行文件 $APP_NAME 不存在。请先运行 'go build ./cmd/adkr_node' 进行编译。"
        exit 1
    fi

    # 创建日志目录
    mkdir -p $LOG_DIR

    echo "正在启动 $N 个节点..."

    # 循环启动 N 个节点进程
    for i in $(seq 0 $(($N-1))); do
        echo "  - 启动节点 $i..."
        # 在后台运行节点程序，并将标准输出和错误输出重定向到独立的日志文件
        $APP_NAME -id $i > "$LOG_DIR/node_$i.log" 2>&1 &
    done

    echo "所有节点已在后台启动。日志文件位于 '$LOG_DIR' 目录下。"
    echo "使用 'tail -f $LOG_DIR/node_0.log' 来查看某个节点的实时日志。"
    echo "使用 './run_local.sh stop' 来停止所有节点。"
}

# 停止函数
stop() {
    echo "正在停止所有节点进程..."
    # 使用 pkill 命令来杀死所有名为 adkr_node 的进程
    # -f 标志可以匹配整个命令行，更可靠
    pkill -f $APP_NAME
    echo "所有节点已停止。"
}

# 根据传入的第一个参数来决定是启动还是停止
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    *)
        echo "用法: $0 {start|stop}"
        exit 1
        ;;
esac